const express = require('express');
const router = express.Router();
const ChatModel =  require('../models/chat') 
const UserModel =  require('../models/user') 

//返回值内要过滤掉的属性
const filter = {password: 0, __v: 0};
/*
获取当前用户所有相关聊天信息列表
 */
router.get('/msglist', function(req, res){
    //获取cookie中的userid
    const userid = req.cookies.userid;
    // 查询得到所有user文档数组
    UserModel.find(function(err, userDocs){
         // 用对象存储所有user信息: key为user的_id, val为name和header组成的user对象
        const users = userDocs.reduce((users, user) => {
            users[user._id] = {username: user.username, header: user.header};
            return users;
        }, {})
        /*
        查询userid相关的所有聊天信息
        参数1: 查询条件
        参数2: 过滤条件
        参数3: 回调函数
        */
        ChatModel.find({'$or': [{from: userid}, {to: userid}]}, filter, function (err, chatMsgs) {
            // 返回包含所有用户和当前用户相关的所有聊天消息的数据
            
            res.send({code: 0, data: {users, chatMsgs}})
        })
    })

})
/*
修改指定消息为已读
 */
router.post('/readmsg', function(req, res){
    // 得到请求中的from和to
    const from = req.body.from;
    const to = req.cookies.userid;
    /*
    更新数据库中的chat数据
    参数1: 查询条件
    参数2: 更新为指定的数据对象
    参数3: 是否1次更新多条, 默认只更新一条
    参数4: 更新完成的回调函数
    */
    //如果multi=true，则修改所有符合条件的行，否则只修改第一条符合条件的行。
    ChatModel.update({from, to, read: false}, {read: true}, {multi: true}, function(err, doc){
        res.send({code: 0, data: doc.nModified}) // 更新的数量
    })
})


module.exports = router;
